package modeles;

public class ECB {
	
	DES_Encrypt des;

	public ECB(DES_Encrypt des) {
		this.des = des;
	}
	
	public int[] encrypt(int[] key_bit, int[]message_bit, boolean encrypt){
		int nbBlocs = message_bit.length/64; //bloc de 64 bits
		int debut=0, fin=64;
		int[] bloc_bit;
		int[] bloc_crypt;
		int[][] total = new int[nbBlocs][64];
		//pour chaque bloc
		for(int i=0; i<nbBlocs; i++){
			bloc_bit = new int[64];
			//choix du bloc
			int i_encours = 0;
			for (int i_bloc=debut; i_bloc<fin; i_bloc++){
				bloc_bit[i_encours]= message_bit[i_bloc];
				i_encours++;
			}
			des.printTab(bloc_bit, "bloc en cours");

			
			//encryption
			bloc_crypt = new int[64];	
			bloc_crypt = des.doEncryptBloc(bloc_bit, key_bit, encrypt);		
			total[i] = bloc_crypt;
			//passage au prochain bloc
			debut=fin;
			fin+=64;
		}
		
		String titre = "";
		
		if(encrypt)
			titre = "crypt";
		else
			titre = "encrypt";
			
		for (int i=0; i<nbBlocs; i++)
			des.printTab(total[i], "texte total "+titre+" bloc "+i);

		int[] bloc_fin = new int[nbBlocs*64]; 

		int index_gen = 0;
		for (int i=0; i<nbBlocs; i++){
			for(int j=0; j<64; j++){
				bloc_fin[index_gen] = total[i][j];
				index_gen++;
			}
		}
		
		
		//System.out.println("res : "+des.binToString(total, nbBlocs));
		//DES_Encrypt.retour_decrypt = des.binToString(total, nbBlocs);
		DES_Encrypt.retour_decrypt = des.binToString(bloc_fin, nbBlocs);
		//TESTbinToString(bloc_fin, nbBlocs);
		return bloc_fin;
	}


}
